package com.company;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Main {

    // 1. 将数据保存到程序中【List】
    // 遍历输出所有数据
    // 计算语文的最高分
    // 计算数学的平均分
    // 统计男生和女生的人数
    // 根据英语成绩进行排序输出【从高到低】
    // ……………………
    static ArrayList<StudentScore> studentScores
            = new ArrayList();

    public static void main(String[] args) {
        // write your code here
        // 1. 将数据保存到程序中【List】
        initData();
        // 遍历输出所有数据
        showAll();
        // 计算语文的最高分
        maxLanguage();
        // 计算数学的平均分
        avgMath();
        // 统计男生和女生的人数
        staticInfo();
        // 根据英语成绩进行排序输出【从高到低】
        sortByEnglish();
        //
        sortBylangusge();
    }

    private static void sortBylangusge() {

    }

    private static void sortByEnglish() {
//        studentScores.sort(new Comparator<StudentScore>() {
//            @Override
//            public int compare(StudentScore o1, StudentScore o2) {
//                return o2.getEnglish()-o1.getEnglish() ;
//            }
//        });

        // 使用Collection来改写排序
Collections.sort(studentScores, new Comparator<StudentScore>() {
    @Override
    public int compare(StudentScore o1, StudentScore o2) {
        return o2.getEnglish() - o1.getEnglish();
    }
});        showAll();

    }

    private static void staticInfo() {
        int maleCount = 0; // 记录男生人数
        int femaleCount = 0; // 记录女生人数

        for (StudentScore ss : studentScores) {
            if (ss.getSex().equals("男")) {
                maleCount++;
            } else {
                femaleCount++;
            }
        }
        System.out.println("男生:"+maleCount);
        System.out.println("女生:"+femaleCount);

    }

    private static void avgMath() {
        // avgScore 目前为止的平均分
        double avgScore = (double) studentScores.get(0).getMath();
        for (int i = 1; i < studentScores.size(); i++) {
            avgScore = (avgScore * i + studentScores.get(i).getMath()) / (i + 1);
        }
        System.out.println("数学的平均成绩为：" + avgScore);
    }

    private static void maxLanguage() {
        //记录最大的语文成绩,默认第一个是最大的
        StudentScore sc = studentScores.get(0);
        for (int i = 0; i < studentScores.size(); i++) {
            //如果下一个比当前的记录的大，则替换
            if (sc.getLanguage() < studentScores.get(i).getLanguage()) {
                sc = studentScores.get(i);
            }
        }
        System.out.println("最大的语文成绩为:" + sc.getLanguage());

    }

    // 1. 将数据保存到程序中【List】
    public static void initData() {
        studentScores.add(new StudentScore("001", "TOM1", "男", 78, 87, 98));
        studentScores.add(new StudentScore("002", "TOM2", "男", 63, 67, 85));
        studentScores.add(new StudentScore("003", "TOM3", "女", 78, 99, 86));
        studentScores.add(new StudentScore("004", "TOM4", "女", 88, 32, 100));
    }

    //遍历输出所有数据
    public static void showAll() {
        for (int i = 0; i < studentScores.size(); i++) {
            System.out.println(studentScores.get(i));
        }
    }
}
